package com.yuw.dz;

import java.util.*;

public class TestDriver2 {
    public static void main(String[] args) {
        test05();
    }

    /**
     * Map接口-TreeMap实现类
     */
    public static void test05() {

        // TreeMap的使用【面向父类的编程】【多态：父类类型指代子类】【软件工程：面向接口的编程】
        Map<String, Object> map = new TreeMap<>();
        // 向集合中添加键值对元素 <姓名-成绩>
        map.put("zhangsan", 80);
        map.put("lisi", 90);
        map.put("lisi", 80);
        map.put("wangwu", 70);
        map.put("zhaoliu", 80);
        //map.put(null, "null"); // TreeMap中key不能为null
        //list.add(2);
        // 遍历Map集合
        // 获取Map中素有的Entry集合
        Set<Map.Entry<String, Object>> setE = map.entrySet();
        // 转变为对Set集合的遍历
        System.out.println("使用foreach遍历Map的entry集合：");
        // 遍历set集合
        for (Map.Entry<String, Object> obj : setE) {
            // obj是一个Entry对象，将其进行向下溯型
            //Map.Entry en = (Map.Entry) obj;
            //System.out.println(en.getKey() + " - " + en.getValue());
            System.out.println(obj.getKey() + " - " + obj.getValue());
        }
        // 换行
        System.out.println();

        System.out.println("使用迭代器Iterator遍历Map的entry集合：");
        // Iterator遍历set集合
        Iterator<Map.Entry<String, Object>> it = setE.iterator();
        // hasNext()表示判定集合中还有没有下一个元素，没有则返回false，有则返回true
        // next()用户获取集合当前位置的元素值，并将指针移动到下一个元素的位置
        while (it.hasNext()) {
            // 使用next获取当前Entry对象
            //Object obj = it.next(); // obj是一个Entry
            // obj是一个Entry对象，将其进行向下溯型
            //Map.Entry en = (Map.Entry) obj;
            Map.Entry en = it.next(); // 使用了泛型
            System.out.println(en.getKey() + " - " + map.get(en.getKey()));
        }
        // 换行
        System.out.println();

        // 将Map的遍历转变为KeySet的遍历：
        // 获取Map中素有的Key值的Set集合
        Set<String> setKeys = map.keySet();
        System.out.println("使用迭代器Iterator遍历Map的Key集合：");
        // Iterator遍历set集合
        Iterator<String> itK = setKeys.iterator();
        // 转变为对Set集合的遍历
        while (itK.hasNext()) {
            // 使用next获取当前Key值
            //Object obj = itK.next(); // obj是一个map中的Key
            String  key = itK.next(); // 使用了泛型
            System.out.println(key + " - " + map.get(key));
        }

    }

    /**
     * Map接口-LinkedHashMap实现类
     */
    public static void test04() {

        // HashMap的使用【面向父类的编程】【多态：父类类型指代子类】【软件工程：面向接口的编程】
        Map map = new LinkedHashMap();
        // 向集合中添加键值对元素 <姓名-成绩>
        map.put("zhangsan", 80);
        map.put("lisi", 90);
        map.put("lisi", 80);
        map.put("wangwu", 70);
        map.put("zhaoliu", 80);
        map.put(null, "null");
        //list.add(2);
        // 遍历Map集合
        // 获取Map中素有的Entry集合
        Set setE = map.entrySet();
        // 转变为对Set集合的遍历
        System.out.println("使用foreach遍历Map的entry集合：");
        // 遍历set集合
        for (Object obj : setE) {
            // obj是一个Entry对象，将其进行向下溯型
            Map.Entry en = (Map.Entry) obj;
            System.out.println(en.getKey() + " - " + en.getValue());
        }
        // 换行
        System.out.println();

        System.out.println("使用迭代器Iterator遍历Map的entry集合：");
        // Iterator遍历set集合
        Iterator it = setE.iterator();
        // hasNext()表示判定集合中还有没有下一个元素，没有则返回false，有则返回true
        // next()用户获取集合当前位置的元素值，并将指针移动到下一个元素的位置
        while (it.hasNext()) {
            // 使用next获取当前Entry对象
            Object obj = it.next(); // obj是一个Entry
            // obj是一个Entry对象，将其进行向下溯型
            Map.Entry en = (Map.Entry) obj;
            System.out.println(en.getKey() + " - " + map.get(en.getKey()));
        }
        // 换行
        System.out.println();

        // 将Map的遍历转变为KeySet的遍历：
        // 获取Map中素有的Key值的Set集合
        Set setKeys = map.keySet();
        System.out.println("使用迭代器Iterator遍历Map的Key集合：");
        // Iterator遍历set集合
        Iterator itK = setKeys.iterator();
        // 转变为对Set集合的遍历
        while (itK.hasNext()) {
            // 使用next获取当前Key值
            Object obj = itK.next(); // obj是一个map中的Key
            System.out.println(obj + " - " + map.get(obj));
        }

    }

    /**
     * Map接口-HashMap实现类
     */
    public static void test03() {

        // HashMap的使用【面向父类的编程】【多态：父类类型指代子类】【软件工程：面向接口的编程】
        Map map = new HashMap();
        // 向集合中添加键值对元素 <姓名-成绩>
        map.put("zhangsan", 80);
        map.put("lisi", 90);
        map.put("lisi", 80);
        map.put("wangwu", 70);
        map.put("zhaoliu", 80);
        map.put(null, "null");
        //list.add(2);
        // 遍历Map集合
        // 获取Map中素有的Entry集合
        Set setE = map.entrySet();
        // 转变为对Set集合的遍历
        System.out.println("使用foreach遍历Map的entry集合：");
        // 遍历set集合
        for (Object obj : setE) {
            // obj是一个Entry对象，将其进行向下溯型
            Map.Entry en = (Map.Entry) obj;
            System.out.println(en.getKey() + " - " + en.getValue());
        }
        // 换行
        System.out.println();

        System.out.println("使用迭代器Iterator遍历Map的entry集合：");
        // Iterator遍历set集合
        Iterator it = setE.iterator();
        // hasNext()表示判定集合中还有没有下一个元素，没有则返回false，有则返回true
        // next()用户获取集合当前位置的元素值，并将指针移动到下一个元素的位置
        while (it.hasNext()) {
            // 使用next获取当前Entry对象
            Object obj = it.next(); // obj是一个Entry
            // obj是一个Entry对象，将其进行向下溯型
            Map.Entry en = (Map.Entry) obj;
            System.out.println(en.getKey() + " - " + map.get(en.getKey()));
        }
        // 换行
        System.out.println();

        // 将Map的遍历转变为KeySet的遍历：
        // 获取Map中素有的Key值的Set集合
        Set setKeys = map.keySet();
        System.out.println("使用迭代器Iterator遍历Map的Key集合：");
        // Iterator遍历set集合
        Iterator itK = setKeys.iterator();
        // 转变为对Set集合的遍历
        while (itK.hasNext()) {
            // 使用next获取当前Key值
            Object obj = itK.next(); // obj是一个map中的Key
            System.out.println(obj + " - " + map.get(obj));
        }

    }

    /**
     * List接口-LinkedList实现类
     */
    public static void test02() {

        // LinkedList的使用【面向父类的编程】【多态：父类类型指代子类】【软件工程：面向接口的编程】
        List<String> list = new LinkedList<>();
        // 向集合中添加元素
        list.add("zhangsan");
        list.add("lisi");
        list.add("lisi");
        list.add("wangwu");
        list.add("zhaoliu");
        list.add(null);
        //list.add(2);
        System.out.println("使用标准for遍历HashSet集合：");
        // 遍历set集合
        for (int i = 0; i < list.size(); i++) {
            System.out.print("    " + list.get(i));
        }
        // 换行
        System.out.println();

        System.out.println("使用foreach遍历HashSet集合：");
        // 遍历set集合
        for (String obj : list) {
            System.out.print("    " + obj);
        }
        // 换行
        System.out.println();

        System.out.println("使用iterator迭代器遍历HashSet集合：");
        // Iterator遍历set集合
        Iterator it = list.iterator();
        // hasNext()表示判定集合中还有没有下一个元素，没有则返回false，有则返回true
        // next()用户获取集合当前位置的元素值，并将指针移动到下一个元素的位置
        while (it.hasNext()) {
            // 使用next获取当前元素的值
            Object obj = it.next();
            System.out.print("    " + obj);
        }
        // 换行
        System.out.println();
    }

    /**
     * List接口-ArrayList实现类
     */
    public static void test01() {

        // ArrayList的使用【面向父类的编程】【多态：父类类型指代子类】【软件工程：面向接口的编程】
        List list = new ArrayList();
        // 向集合中添加元素
        list.add("zhangsan");
        list.add("lisi");
        list.add("lisi");
        list.add("wangwu");
        list.add("zhaoliu");
        list.add(null);
        //list.add(2);
        System.out.println("使用标准for遍历HashSet集合：");
        // 遍历set集合
        for (int i = 0; i < list.size(); i++) {
            System.out.print("    " + list.get(i));
        }
        // 换行
        System.out.println();

        System.out.println("使用foreach遍历HashSet集合：");
        // 遍历set集合
        for (Object obj : list) {
            System.out.print("    " + obj);
        }
        // 换行
        System.out.println();

        System.out.println("使用iterator迭代器遍历HashSet集合：");
        // Iterator遍历set集合
        Iterator it = list.iterator();
        // hasNext()表示判定集合中还有没有下一个元素，没有则返回false，有则返回true
        // next()用户获取集合当前位置的元素值，并将指针移动到下一个元素的位置
        while (it.hasNext()) {
            // 使用next获取当前元素的值
            Object obj = it.next();
            System.out.print("    " + obj);
        }
        // 换行
        System.out.println();
    }
}
